'use strict'
import { _xhb_map_loadScript, _xhb_map_waitForParameterReady } from '../../../utils/util.js'
class _AMapComponent {
    constructor(options) {
        this.options = options;
    }
    initMap() {
        _xhb_map_loadScript('https://webapi.amap.com/loader.js', () => {
            if (this.options.mapStyle && this.options.mapStyle.indexOf('amap://styles') == -1) {
                this.options.mapStyle = 'amap://styles/' + this.options.mapStyle;
            }
            window._AMapSecurityConfig = {
                securityJsCode: this.options.security.code,
            };
            AMapLoader.load({
                key: this.options.security.key, //申请好的Web端开发者 Key，调用 load 时必填
                version: this.options.version, //指定要加载的 JS API 的版本，缺省时默认为 1.4.15
            }).then((AMap) => {
                // _xhb_map_removeLoading()
                window.globalMap.map = new AMap.Map(this.options.mapContainer, {
                    viewMode: '2D', //默认使用 2D 模式
                    zoom: this.options.zoom, //地图级别
                    center: this.options.center, //地图中心点
                    mapStyle: this.options.mapStyle, //设置地图的显示样式
                });
                window.globalMap.instance = AMap;
                window.globalMap.status = true;
                console.log('高德地图初始化成功')
            }).catch((e) => {
                console.error(e); //加载错误提示
            });
        });
    }


    addMarker(id, options, events) {
        _xhb_map_waitForParameterReady(() => {
            let marker = new window.globalMap.instance.Marker({
                //要显示该marker的地图对象
                map: window.globalMap.map,
                //点标记在地图上显示的位置
                position: options.position,
                //在点标记中显示的图标。可以传一个图标地址，也可以传Icon对象。有合法的content内容设置时，此属性无效。
                icon: options.icon,
                //点标记显示内容。可以是HTML要素字符串或者HTML DOM对象。content有效时，icon属性将被覆盖。
                content: options.content,
                //鼠标滑过点标记时的文字提示。不设置则鼠标滑过点标无文字提示。
                title: options.title,
                //点标记是否可见，默认值：true
                visible: options.visible,
                //点标记的叠加顺序。地图上存在多个点标记叠加时，通过该属性使级别较高的点标记在上层显示，默认zIndex：12
                zIndex: options.zIndex,
                //点标记显示位置偏移量，默认值为 [0,0] 。Marker指定position后，
                //默认以marker左上角位置为基准点（若设置了anchor，则以anchor设置位置为基准点），
                //对准所给定的position位置，若需使marker指定位置对准在position处，需根据marker的尺寸设置一定的偏移量。
                offset: options.offset,
                //设置点标记锚点，可选值：
                //'top-left','top-center','top-right', 'middle-left', 'center',
                // 'middle-right', 'bottom-left', 'bottom-center', 'bottom-right' 
                anchor: options.anchor,
                //点标记的旋转角度，，广泛用于改变车辆行驶方向。默认值：0
                angle: options.angle,
                //点标记是否可点击，默认值: true
                clickable: options.clickable,
                //设置点标记是否可拖拽移动，默认值：false
                draggable: options.draggable,
                //事件是否冒泡，默认为 false
                bubble: options.bubble,
                //点标记显示的层级范围，超过范围不显示。默认值：zooms: [2, 20]
                zooms: options.zooms,
                //指定鼠标悬停时的鼠，默认值：'pointer'
                cursor: options.cursor,
                //鼠标点击时marker是否置顶，默认false ，不置顶
                topWhenClick: options.topWhenClick,
                //设置Marker点是否离地绘制，默认值为0，等于0时贴地绘制。
                //大于0时离地绘制，此时Marker点高度等于height值加Marker点高程值
                //（JSAPI v2.1新增属性目前只适用于v2.1版本）。
                height: options.height,
                //添加文本标注
                //label.content 文本标注的内容
                //label.offset 为偏移量。如设置了 direction，以 direction 方位为基准点进行偏移。
                //label.direction 文本标注方位 可选值：'top'|'right'|'bottom'|'left'|'center'，默认值: 'right'。
                label: options.label,
                //用户自定义属性 ，支持JavaScript API任意数据类型，
                //如 Marker的id等。可将自定义数据保存在该属性上，方便后续操作使用。
                extData: options.extData,
            });
            events.forEach(e=>{
                marker.on(e.on, e.callBack)
            })
            window.globalMap.markers.push({ id, data: marker });
        })

    }

    delMarker(id) {
        window.globalMap.markers.filter(o => o.id === id).forEach(o => window.globalMap.map.remove(o.data))
    }

    addPolyline(id, options, events) {
        let polyline = new window.globalMap.instance.Polyline({
            path: options.position,
            isOutline: true,
            outlineColor: '#ffeeff',
            borderWeight: 3,
            strokeColor: "#3366FF",
            strokeOpacity: 1,
            strokeWeight: 6,
            // 折线样式还支持 'dashed'
            strokeStyle: options.strokeStyle,
            // strokeStyle是dashed时有效
            strokeDasharray: [10, 5],
            lineJoin: 'round',
            lineCap: 'round',
            zIndex: 50,
        })
        events.forEach(e=>{
            polyline.on(e.on, e.callBack)
        })
        // polyline
        window.globalMap.map.add([polyline]);
        // window.globalMap.map.setFitView();
        window.globalMap.polylines.push({ id, data: polyline });
    }

    delPolyline(id) {
        window.globalMap.polylines.filter(o => o.id === id).forEach(o => window.globalMap.map.remove(o.data))
    }

    addInfoWindow(id, opt, events) {
        var infoWindow = new window.globalMap.instance.InfoWindow({
            isCustom: true,  //使用自定义窗体
            content: opt.dom,
        });
        events.forEach(e=>{
            infoWindow.on(e.on, e.callBack)
        })
        infoWindow.open(window.globalMap.map, opt.position)
        window.globalMap.infoWindows.push({ id, data: infoWindow });
    }
    delInfoWindow(id) {
        window.globalMap.infoWindows.filter(o => o.id === id).forEach(o => window.globalMap.map.remove(o.data))
    }
    
}
export default _AMapComponent